package dao

import (
	"net/http"
	"web08_35_tushu/model"
	"web08_35_tushu/utils"
)

//AddSession 向数据库中添加session
func AddSession(sess *model.Session) error {
	//写添加数据的sql语句
	sqlStr := "insert into sessions values(?,?,?)"
	_, err := utils.Db.Exec(sqlStr, sess.SessionID, sess.UserName, sess.UserID)
	if err != nil {
		return err
	}
	return nil
}

//DeleteSession 删除数据库中的session
func DeleteSession(sessID string) error {
	//删除数据的sql语句
	sqlStr := "delete from sessions where session_id = ?"
	_, err := utils.Db.Exec(sqlStr, sessID)
	if err != nil {
		return err
	}
	return nil
}

//GetSession 查询session
func GetSession(sessID string) (*model.Session, error) {
	//查询语句
	sqlStr := "select session_id,username,user_id from sessions where session_id = ?"
	//预编译sql语句
	inStmt, err := utils.Db.Prepare(sqlStr)
	if err != nil {
		return nil, err
	}
	//执行查询操作，传入参数sessID
	row := inStmt.QueryRow(sessID)
	//创建个session结构体存放查询结果
	sess := &model.Session{}
	//扫描字段值并存入创建的session里
	row.Scan(&sess.SessionID, &sess.UserName, &sess.UserID)
	return sess, nil
}

//IsLogin 判断用户是否登录,可以防止sql注入之类的,在查询seesion前先判断一下,虽然我觉得在数据库操作时预编译就行
func IsLogin(r *http.Request) (bool, *model.Session) {
	//根据cookie名字获取cookie
	cookie, _ := r.Cookie("user")
	if cookie != nil {
		//获取cookie的值
		cookieValue := cookie.Value
		//通过cookie的值去数据库找session
		session, _ := GetSession(cookieValue)
		if session.UserID > 0 {
			//已登录
			return true, session
		}
	}
	//没登录就返回false
	return false, nil
}
